/**
* @project admin-go-api
* @name sysAdmin
* @descriptions 用户控制层
* @author 寒锋
* @date 2023-12-14 17:38:45
 */

package controller

import (
	"admin-go-api/api/entity"
	"admin-go-api/api/service"
	"admin-go-api/common/response"
	"admin-go-api/constants"
	"fmt"
	"github.com/gin-gonic/gin"
	"strconv"
)

// GetSysAdminList
// @Summary 管理员列表接口
// @Produce json
// @Description 管理员列表接口
// @Security ApiKeyAuth
// @Param pageNum query int false "当前页"
// @Param pageSize query int false "每页显示数量"
// @Param username query string false "用户名"
// @Param nickname query string false "昵称"
// @Param status query int false "状态（1->正常，2->禁用）"
// @Param beginTime query string false "开始时间"
// @Param endTime query string false "结束时间"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/index [get]
func GetSysAdminList(c *gin.Context) {
	PageNum, _ := strconv.Atoi(c.DefaultQuery("pageNum", "1"))
	PageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
	UserName := c.DefaultQuery("username", "")
	NickName := c.DefaultQuery("nickname", "")
	Status, _ := strconv.Atoi(c.DefaultQuery("status", "0"))
	BeginTime := c.DefaultQuery("beginTime", "")
	EndTime := c.DefaultQuery("endTime", "")
	service.SysAdminService().GetSysAdminList(c, PageNum, PageSize, UserName, NickName, Status, BeginTime, EndTime)
}

// CreateSysAdmin
// @Summary 添加管理员
// @Produce json
// @Description 添加管理员接口
// @Security ApiKeyAuth
// @Param data body entity.StoreSysAdminDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/store [post]
func CreateSysAdmin(c *gin.Context) {
	var dto entity.StoreSysAdminDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().CreateSysAdmin(c, dto)
}

// GetSysAdminInfoById
// @Summary 管理员详情接口
// @Produce json
// @Description 管理员详情接口
// @Security ApiKeyAuth
// @param admin_id query int true "管理员id"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/show [get]
func GetSysAdminInfoById(c *gin.Context) {
	adminId, _ := strconv.Atoi(c.DefaultQuery("admin_id", "0"))
	service.SysAdminService().GetSysAdminById(c, adminId)
}

// UpdateSysAdmin
// @Summary 修改管理员员接口
// @Produce json
// @Description 修改管理员接口
// @Security ApiKeyAuth
// @Param data body entity.UpdateSysAdminDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/update [put]
func UpdateSysAdmin(c *gin.Context) {
	var dto entity.UpdateSysAdminDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	fmt.Println(dto)
	service.SysAdminService().UpdateSysAdmin(c, dto)
}

// UpdateSysAdminState
// @Summary 修改管理员员状态接口
// @Produce json
// @Security ApiKeyAuth
// @Description UpdateSysAdminState
// @Param data body entity.UpdateSysAdminStateDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/state [put]
func UpdateSysAdminState(c *gin.Context) {
	var dto entity.UpdateSysAdminStateDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().UpdateSysAdminState(c, dto)
}

// DeleteSysAdmin
// @Summary 删除管理员员接口
// @Produce json
// @Description 删除管理员员接口
// @Security ApiKeyAuth
// @Param data body entity.SysAdminIdDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/destroy [delete]
func DeleteSysAdmin(c *gin.Context) {
	var dto entity.SysAdminIdDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().DeleteSysAdminById(c, dto)
}

// RestSysAdminPassword
// @Summary 重置管理员密码接口
// @Produce json
// @Description 重置管理员密码接口
// @Security ApiKeyAuth
// @Param data body entity.ResetSysAdminPasswordDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/restPassword [put]
func RestSysAdminPassword(c *gin.Context) {
	var dto entity.ResetSysAdminPasswordDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().ResetSysAdminPassword(c, dto)
}

// UpdatePersonal
// @Summary 修改管理员个人信息接口
// @Produce json
// @Description 修改管理员个人信息接口
// @Security ApiKeyAuth
// @Param data body entity.UpdatePersonalDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/updatePersonal [put]
func UpdatePersonal(c *gin.Context) {
	var dto entity.UpdatePersonalDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().UpdatePersonal(c, dto)
}

// UpdatePersonalPassword
// @Summary 修改管理员个人密码接口
// @Produce json
// @Description 修改管理员个人密码接口
// @Security ApiKeyAuth
// @Param data body entity.UpdatePersonalPasswordDto true "data"
// @Success 200 {object} response.Result
// @Router /api/sysAdmin/updatePersonalPassword [put]
func UpdatePersonalPassword(c *gin.Context) {
	var dto entity.UpdatePersonalPasswordDto
	err := c.ShouldBind(&dto)
	if err != nil {
		response.Failed(c, int(constants.ApiCode.FAILED), fmt.Sprintf("参数错误（%s）", err.Error()))
	}
	service.SysAdminService().UpdatePersonalPassword(c, dto)
}
